package memento;

import memento.test.MementoCaretaker;
import memento.test.UserInfo;

public class Client {
    public static void main(String a[]) {
        // 创建用户和管理者
        UserInfo user = new UserInfo("zhangsan", "123456", "13000000000");
        MementoCaretaker caretaker = new MementoCaretaker();

        // === 初始状态 ===
        System.out.println("=== 初始状态 ===");
        user.show();
        caretaker.saveState(user.createMemento("初始注册状态"));

        // === 第一次修改 ===
        System.out.println("\n=== 第一次修改 ===");
        user.setPassword("newpass123");
        user.setTelNo("13100001111");
        user.show();
        caretaker.saveState(user.createMemento("修改密码和电话"));

        // === 第二次修改 ===
        System.out.println("\n=== 第二次修改 ===");
        user.setAccount("lisi");
        user.setPassword("lisipass");
        user.show();
        caretaker.saveState(user.createMemento("更换账号"));

        // === 保存重要的命名状态 ===
        caretaker.saveNamedState("生产环境配置", user.createMemento("生产环境配置"));

        // === 显示历史 ===
        System.out.println("\n");
        caretaker.showHistory();

        // === 撤销操作 ===
        System.out.println("\n=== 撤销操作 ===");
        if (caretaker.canUndo()) {
            user.restoreFromMemento(caretaker.undo());
            user.show();
        }

        if (caretaker.canUndo()) {
            user.restoreFromMemento(caretaker.undo());
            user.show();
        }

        // === 重做操作 ===
        System.out.println("\n=== 重做操作 ===");
        if (caretaker.canRedo()) {
            user.restoreFromMemento(caretaker.redo());
            user.show();
        }

        // === 恢复到命名状态 ===
        System.out.println("\n=== 恢复到命名状态 ===");
        user.restoreFromMemento(caretaker.getNamedState("生产环境配置"));
        user.show();

        // === 最终历史状态 ===
        System.out.println("\n");
        caretaker.showHistory();
    }
}